#!/usr/bin/env python3
"""
增强版 ExecutionEngine 集成示例
演示如何使用增强后的 DatabaseServerAdapter 进行高级数据库操作
包括索引管理、性能监控、用户管理等功能
"""

from database_server_adapter import DatabaseServerAdapter
from table_schema import Column, ColumnType
from storage_engine import CachePolicy
import json


def enhanced_execution_engine_example():
    """
    增强版 ExecutionEngine 调用示例
    展示完整的数据库管理功能
    """
    
    print("🚀 增强版 ExecutionEngine 集成示例")
    print("=" * 50)
    
    # 1. 创建数据库适配器
    adapter = DatabaseServerAdapter(
        data_root="./enhanced_example_data",
        cache_size=100,
        cache_policy=CachePolicy.LRU,
        enable_locking=True
    )
    
    try:
        # 2. 用户认证
        print("🔐 执行用户认证...")
        auth_success = adapter.login("root", "root12345")
        
        if not auth_success:
            print("❌ 认证失败！请检查用户名和密码")
            return False
        
        print("✅ 认证成功！当前用户:", adapter.get_current_user())
        
        # 3. 数据库和表创建
        print("\n📊 执行数据库操作...")
        adapter.create_database("enhanced_db")
        adapter.use_database("enhanced_db")
        
        # 创建产品表（带主键）
        product_columns = [
            Column(name="product_id", column_type=ColumnType.INT, primary_key=True),
            Column(name="name", column_type=ColumnType.VARCHAR, length=100),
            Column(name="price", column_type=ColumnType.FLOAT),
            Column(name="category", column_type=ColumnType.VARCHAR, length=50),
            Column(name="stock", column_type=ColumnType.INT)
        ]
        adapter.create_table("products", product_columns)
        
        # 4. 插入测试数据
        print("\n📝 插入测试数据...")
        test_products = [
            {"product_id": 1, "name": "iPhone 14", "price": 999.99, "category": "Electronics", "stock": 50},
            {"product_id": 2, "name": "MacBook Pro", "price": 1999.99, "category": "Electronics", "stock": 30},
            {"product_id": 3, "name": "iPad", "price": 499.99, "category": "Electronics", "stock": 75},
            {"product_id": 4, "name": "Book", "price": 29.99, "category": "Books", "stock": 100},
            {"product_id": 5, "name": "Headphones", "price": 199.99, "category": "Electronics", "stock": 25}
        ]
        
        # 使用批量插入
        bulk_result = adapter.bulk_insert("products", test_products)
        print(f"批量插入结果: 成功 {bulk_result['success_count']}/{bulk_result['total_records']}")
        
        # 5. 索引管理示例
        print("\n🔍 索引管理示例...")
        
        # 注意：产品表创建时自动创建了主键索引
        print("产品表已自动创建主键索引 (product_id)")
        
        # 尝试获取索引信息
        try:
            index_info = adapter.get_index_info("products")
            print(f"产品表索引数量: {index_info.get('total_indexes', 0)}")
            for idx_name, idx_stats in index_info.get('indexes', {}).items():
                print(f"  - {idx_name}: {idx_stats.get('column_name', 'N/A')} ({idx_stats.get('index_type', 'N/A')})")
        except Exception as e:
            print(f"索引信息获取暂时不可用: {e}")
            print("  - 系统已自动为主键创建索引")
        
        # 6. 性能监控示例
        print("\n📊 性能监控示例...")
        
        # 获取性能统计
        try:
            perf_stats = adapter.get_performance_stats()
            print("系统性能统计:")
            if 'cache' in perf_stats:
                cache_stats = perf_stats['cache']
                print(f"  缓存命中率: {cache_stats.get('hit_rate', 0):.2%}")
                print(f"  缓存请求: {cache_stats.get('requests', 0)}")
            
            if 'indexes' in perf_stats:
                idx_stats = perf_stats['indexes']
                print(f"  索引数量: {idx_stats.get('total_indexes', 0)}")
        except Exception as e:
            print(f"性能统计暂时不可用: {e}")
        
        # 获取表统计信息
        try:
            table_stats = adapter.get_table_statistics("products")
            print(f"\n产品表统计:")
            print(f"  记录数: {table_stats.get('record_count', 0)}")
            print(f"  页面数: {table_stats.get('page_count', 0)}")
            print(f"  索引数: {table_stats.get('index_count', 0)}")
        except Exception as e:
            print(f"表统计信息暂时不可用: {e}")
            # 使用基础方法获取记录数
            records = adapter.select_records("products")
            print(f"  记录数: {len(records)} (基础查询)")
        
        # 7. 带统计的查询示例
        print("\n⚡ 查询性能测试...")
        
        # 执行查询并获取性能统计
        query_result = adapter.execute_query_with_stats(
            adapter.select_records, 
            "products", 
            {"category": "Electronics"}
        )
        
        if query_result['success']:
            print(f"电子产品查询结果: {len(query_result['result'])} 条记录")
            print(f"查询耗时: {query_result['execution_time']:.4f} 秒")
        
        # 8. 用户管理示例（需要管理员权限）
        print("\n👥 用户管理示例...")
        
        # 列出现有用户
        users = adapter.list_users()
        print(f"系统用户数量: {len(users)}")
        
        # 获取当前用户权限
        privileges = adapter.get_user_privileges()
        print(f"当前用户权限数量: {len(privileges)}")
        
        # 9. 高级查询示例
        print("\n🔍 高级查询示例...")
        
        # 条件查询
        expensive_products = adapter.select_records("products", {"price": {"$gt": 500}})
        print(f"价格>500的产品: {len(expensive_products)}")
        
        # 更新操作
        updated_count = adapter.update_records("products", 
                                              {"category": "Electronics"}, 
                                              {"stock": {"$add": 10}})
        print(f"更新电子产品库存: {updated_count} 条记录")
        
        # 10. 系统信息汇总
        print("\n📋 系统信息汇总...")
        databases = adapter.list_databases()
        tables = adapter.list_tables()
        
        print(f"数据库数量: {len(databases)}")
        print(f"当前数据库表数量: {len(tables)}")
        print(f"当前用户: {adapter.get_current_user()}")
        print(f"认证状态: {'已认证' if adapter.is_user_authenticated() else '未认证'}")
        
        return True
        
    except Exception as e:
        print(f"❌ 执行过程中发生错误: {e}")
        return False
    finally:
        print("\n🔚 清理资源...")
        adapter.close()


def demonstrate_advanced_features():
    """演示高级特性"""
    print("\n" + "=" * 50)
    print("🛡️ 高级特性演示")
    print("=" * 50)
    
    adapter = DatabaseServerAdapter(data_root="./advanced_demo_data")
    
    try:
        # 登录
        adapter.login("root", "root12345")
        
        # 创建数据库和表
        adapter.create_database("demo_db")
        adapter.use_database("demo_db")
        
        # 创建用户表
        user_columns = [
            Column(name="user_id", column_type=ColumnType.INT, primary_key=True),
            Column(name="username", column_type=ColumnType.VARCHAR, length=50),
            Column(name="email", column_type=ColumnType.VARCHAR, length=100),
            Column(name="age", column_type=ColumnType.INT),
            Column(name="active", column_type=ColumnType.BOOLEAN)
        ]
        adapter.create_table("users", user_columns)
        
        # 批量插入大量数据
        print("📝 批量插入1000条用户数据...")
        import random
        large_dataset = []
        for i in range(1, 1001):
            large_dataset.append({
                "user_id": i,
                "username": f"user_{i}",
                "email": f"user_{i}@example.com",
                "age": random.randint(18, 65),
                "active": random.choice([True, False])
            })
        
        bulk_result = adapter.bulk_insert("users", large_dataset)
        print(f"批量插入结果: {bulk_result['success_count']}/{bulk_result['total_records']}")
        
        # 创建索引以提高查询性能
        print("\n🔍 创建索引以优化查询性能...")
        adapter.create_index("users", "email", "idx_email", key_type='string')
        adapter.create_index("users", "age", "idx_age", key_type='int')
        
        # 性能测试：有无索引的查询对比
        print("\n⚡ 性能测试...")
        
        # 通过邮箱查询（有索引）
        email_query_result = adapter.execute_query_with_stats(
            adapter.select_records, 
            "users", 
            {"email": "user_500@example.com"}
        )
        
        if email_query_result['success']:
            print(f"邮箱查询耗时: {email_query_result['execution_time']:.4f} 秒")
        
        # 获取详细的性能统计
        final_stats = adapter.get_performance_stats()
        print("\n📊 最终性能统计:")
        print(json.dumps(final_stats, indent=2, ensure_ascii=False))
        
    except Exception as e:
        print(f"❌ 高级特性演示失败: {e}")
    finally:
        adapter.close()


if __name__ == "__main__":
    print("🎯 DatabaseServerAdapter 增强功能演示")
    print("适用于 ExecutionEngine 开发者")
    print("=" * 60)
    
    # 运行增强示例
    success = enhanced_execution_engine_example()
    
    if success:
        # 运行高级特性演示
        demonstrate_advanced_features()
    
    print("\n" + "=" * 60)
    print("📋 总结")
    print("=" * 60)
    
    if success:
        print("🎉 增强功能演示成功！")
        print("\n💡 新增功能总结:")
        print("   ✅ 索引管理接口 (create_index, drop_index, get_index_info)")
        print("   ✅ 性能监控接口 (get_performance_stats, get_table_statistics)")
        print("   ✅ 用户管理接口 (create_user, grant_privilege, list_users等)")
        print("   ✅ 批量操作接口 (bulk_insert)")
        print("   ✅ 高级查询接口 (execute_query_with_stats)")
        print("   ✅ 完整的权限控制和认证机制")
        print("\n🔧 ExecutionEngine 集成建议:")
        print("   1. 使用 adapter.login() 进行认证")
        print("   2. 利用索引管理接口优化查询性能")
        print("   3. 使用性能监控接口进行系统调优")
        print("   4. 采用批量操作接口提高数据处理效率")
        print("   5. 通过用户管理接口实现多用户系统")
    else:
        print("❌ 演示过程中出现问题，请检查系统配置")
    
    print("\n🚀 你的数据库系统已经具备企业级功能！")
